/*
package test.demo;

import java.util.ArrayList;
import java.util.List;

*/
/***
 ** @category 迪米特法则-示例一
 ** @author qing.yunhui
 ** @email: qingyh@glodon.com
 ** @createTime: 2021-12-30 14:26
 **//*

public class Dimit {

}
*/
/**
 * <p>班级类主要由一个ID和班级名称、一个学生列表, 另外还提供一个打印学生列表的Print()方法。</p>
 * *//*

class MClass {
    public int id;
    public String className;
    public List<Student> students = new ArrayList<>();
    public void print(){
        for (Student stu : students) {
            System.out.println("stu id:" + stu.id + " stu name" + stu.studentName);
        }
    }
}
*/
/**
 * <p>定义学生类</p>
 * *//*

class Student{
    public int id;
    public String studentName;
}
*/
/**
 * <p>School类主要构成同样包含一个ID和学校名称, 另外也包含了一个Pirnt方法, 他负责打印班级名称和学生名称</p>
 * *//*

class School{
    */
/**
     * 现在这个设计的主要问题出在School中，根据迪米特法则，只与直接的类发生通信，而Student类并不是School类的直接关系（以局部变量出现的耦合不属于直接关系），
     * 从逻辑上讲学校只与他的班级耦合就行了，与班级的学生并没有任何联系，
     * 这样设计显然是增加了不必要的耦合。按照迪米特法则，应该避免类中出现这样非直接关系的耦合
     * *//*

    public int id;
    public String schoolName;
    public List<MClass> mClasses = new ArrayList<>();
    public void print(){
        System.out.println("school id:" + id + "school name:" + schoolName);
        for (MClass mClass : mClasses) {
            System.out.println("class id:" + mClass.id + "class name:" + mClass.className);
            List<Student> students = mClass.students;
            for (Student stu : students) {
                System.out.println("student id:" + stu.id + "student name:" + stu.studentName);
            }
        }
    }
}
// 优化后的 School 如下 TODO
public class SchoolNew {
    public int id;
    public String schoolName;
    public List<MClass> mClasses = new ArrayList<>();
    public void print(){
        System.out.println("school id:" + id + "school name:" + schoolName);
        for (MClass mClass : mClasses) {
            System.out.println("class id:" + mClass.id + "class name:" + mClass.className);
            mClass.print();
        }
    }
}
*/